UniCommon機能解説 - Files
IOモジュールのFilesは、ファイル入出力のためのシンプルな機能を提供します
Files
ファイルマネージャです
ファイルパス単位の共有ロックを使い、全てのIOが直列化されます
非同期で読み書きしても不正がおこりません
これは、ファイルIOの処理を簡単にするためです
Files.TryWrite
指定のパスに同期的にデータを書き込みます
code:cs
Files.TryWrite(Application.dataPath + "/save.dat", data);
Asyncsと組み合わせて非同期ファイルIOを行えます
code:cs
Asyncs.Execute(() => {
Files.TryWrite(Application.dataPath + "/save.dat", data)
}, () => {
Debugs.Log("保存完了");
});
TryWriteは以下のパイプラインで実行されます
1. ファイルパスへのFiles経由のIOをロック
システムレベルのIOロックはかけませんが、後述のFiles.TryReadは同じパスへの書き込みが終了しない限り読み込みが開始されません
2. すでにファイルが存在する場合は、書き込み先をtmpファイルにする
3. すでにあるファイルを、.backup拡張子を付けたものにrenameする
4. 書き込んだtmpファイルを、真ファイルにrenameする
これによって、書き込み中にアプリが落ちた場合などでも、保存パスにあるファイルに危害が及びません
また、一度保存した前のファイルを常に.backupに変えることで、冗長ながらさらなる安全性を保ちます
Files.Delete
同様に、削除前に削除対象ファイルを.deletedにrenameしてからそちらを消します
削除中にアプリが落ちても削除対象が不正になりません
Files.TryRead
ファイルから同期的に一気にデータを読み込みます
code:cs
var data = Files.TryRead(Application.dataPath + "/save.dat");
Asyncsと併用することで非同期読み込みができます
code:cs
Asyncs.Execute(() => {
return Files.TryRead(Application.dataPath + "/save.dat");
}, data => {
// 読み込み完了
});
Files.TryReadBackup
Files.TryWriiteが生成した.backupファイルを可能なら読み込みます